1 package uba.db;
2
3 import junit.framework.TestCase;
4 import uba.db.column.CharColumnSpecification;
5 import uba.db.column.ColumnConstraint;
6 import uba.db.column.IntegerColumnSpecification;
7 import uba.db.table.Row;
8 import uba.db.table.Table;
9 import uba.db.table.TableSchema;
10 import uba.db.table.TableSchemaBuilder;
11 import uba.db.table.io.TableReader;
12
13 /***
14 * @version $Revision: 1.5 $
15 */
16 public abstract class TableReaderImplTest extends TestCase {
17 private Table emptyTable;
18 private Table employeeTable;
19 private Object[] testRowValues;
20
21 /***
22 * Las sub-clases deben implementar este método para retorna la instancia
23 * concreta de {@link Table} a testear.
24 *
25 * @param schema esquema que debe tener la tabla
26 *
27 * @throws Exception si no se pudo crear la tabla.
28 */
29 protected abstract Table createTable(TableSchema schema) throws Exception;
30
31 /***
32 * @see junit.framework.TestCase#setUp()
33 */
34 protected void setUp() throws Exception {
35 super.setUp();
36
37 testRowValues = new Object[] {
38 new Object[] { new Integer(1), "Juan", new Integer(2000), new Integer(30) },
39 new Object[] { new Integer(2), "Carlos", new Integer(2590),
40 new Integer(28) },
41 new Object[] { new Integer(3), "Menenedez", new Integer(500),
42 new Integer(23) } };
43 createEmptyTable();
44 createEmployeeTable();
45 }
46
47 private void createEmployeeTable() throws Exception {
48 TableSchema schema = new TableSchemaBuilder("Empleado")
49 .addColumn(new IntegerColumnSpecification("eid"))
50 .addColumn(new CharColumnSpecification("nombre", 20,
51 ColumnConstraint.NOT_NULL))
52 .addColumn(new IntegerColumnSpecification("salario",
53 ColumnConstraint.NOT_NULL))
54 .addColumn(new IntegerColumnSpecification("edad",
55 ColumnConstraint.NOT_NULL)).addPrimaryKeyConstraintTo("eid")
56 .build();
57 employeeTable = createTable(schema);
58
59 employeeTable.insert((Object[]) testRowValues[0]);
60 employeeTable.insert((Object[]) testRowValues[1]);
61 employeeTable.insert((Object[]) testRowValues[2]);
62 }
63
64 private void createEmptyTable() throws Exception {
65 TableSchema schema = new TableSchemaBuilder("vacia")
66 .addColumn(new IntegerColumnSpecification("id")).build();
67
68 emptyTable = createTable(schema);
69 }
70
71 /***
72 * Test: cuando se hace {@link TableReader#hasMoreRows()} en una tabla vacía
73 * se debe retornar false.
74 */
75 public void testHasMoreRowsWhenEmpty() {
76 assertFalse(emptyTable.reader().hasMoreRows());
77 }
78
79 /***
80 * Test: obtener las filas de una tabla.
81 */
82 public void testFetchRows() {
83 TableReader reader = employeeTable.reader();
84 for (int i = 0; reader.hasMoreRows(); i++) {
85 assertRowContainsValues(testRowValues[i], reader.fetchRow());
86 }
87 reader.close();
88 }
89
90 private void assertRowContainsValues(Object value, Row row) {
91 Object[] array = (Object[]) value;
92 assertEquals(array.length, row.table().numberOfColumns());
93 for (int i = 0; i < array.length; i++) {
94 assertEquals(array[i], row.valueAt(i));
95 }
96 }
97 }